package packets;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

import org.jnetpcap.nio.JBuffer;
import org.jnetpcap.packet.JHeader;

/**
 * Diese Klasse repräsentiert eine Router LSA und definiert Methoden, die die entsprechenden Felder zurück geben.
 * @author pascal
 *
 */
public class RouterLSA extends LSA{
	
	/**
	 * Liste der in dieser Router LSA enthaltenen Link Data.
	 */
	private Map<Integer, LinkData> linkDataList;
	
	
	public byte VEB(){
		return getByte(20);
	}
	
	public int numberOfLinks(){
		return getUShort(22);
	}
	
		
	public RouterLSA(JHeader peer, int length, int offset) {
		
		
		this.peer(peer, offset, length);
		linkDataList = new HashMap<Integer, LinkData>();
		decode();
		
	}
	
	/**
	 * Dekodiert den Speicherbereich des Pakets und findet so die enthaltenen Link Datas.
	 */
	@Override
	public void decode() {
		int offset = 24;
		int linkCount = this.numberOfLinks();
		int bytesRemaining = this.size() - offset;
		
		while(bytesRemaining > 0){
			int numberOfTOS = this.getUShort(offset + 9);
			int bytesForNextLink = (numberOfTOS * 4) + 12;
			Integer linkID = new Integer(this.getInt(offset));
			bytesRemaining = bytesRemaining - bytesForNextLink;
			
			LinkData ld = new LinkData(this, offset+4, bytesForNextLink);
			
			linkDataList.put(linkID, ld);
			
			offset = offset + bytesForNextLink;
		}
		
		if(linkDataList.size() != linkCount) System.out.println("Error: Not the right number of links in the LinkList");
		 
	
	}
	

}
